package com.h3bpm.web.util;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;


public class AESUtil {
    // sKey	秘钥
	private static String sKey = "a1s2d3f4g5h6j7k8";
	//ivParameter	向量
    private static String ivParameter = "qwErAsdfzxCv8888";  
    private static AESUtil instance = null;
    
    
	
	public static AESUtil getInstance() {  
        if (instance == null)  {
            instance = new AESUtil();
            }
        return instance;  
    }  
  
    /**
     * 加密  
     * @param sSrc	原始字符串
     * @param
     * @param
     * @return
     */
    @SuppressWarnings("restriction")
	public static String encrypt(String sSrc){
        String result = "";  
        try {  
            Cipher cipher;  
//            cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");  
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
            byte[] raw = sKey.getBytes();  
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式，需要一个向量iv，可增加加密算法的强度  
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);  
            byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));  
            result = new BASE64Encoder().encode(encrypted);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
        // 此处使用BASE64做转码。  
        return result;  
                  
    }  
  
    /**
     * 解密  
     * @param sSrc	密文
     * @param
     * @param
     * @return
     */
    public static String decrypt(String sSrc){
        try {  
            byte[] raw = sKey.getBytes("ASCII");  
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
//            Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");  
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());  
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);  
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密  
            byte[] original = cipher.doFinal(encrypted1);  
            String originalString = new String(original, "utf-8");  
            return originalString;  
        } catch (Exception ex) {  
            ex.printStackTrace();  
            return null;  
        }  
    } 
    /*  public static void main(String[] args) throws IOException {
        String PORTAL_URL = "admin";
         String accessToken = encrypt(PORTAL_URL);

        System.out.println(accessToken);
          accessToken= decrypt(accessToken);
          System.out.println(accessToken);
    }*/
}
